home *** CD-ROM | disk | FTP | other *** search
/ Whiteline: delta / whiteline CD Series - delta.iso / progtool / modula2 / module / kassenst.mod < prev    next >
Text File  |  1995-11-25  |  16KB  |  432 lines

  1. IMPLEMENTATION MODULE   KassenStand;
  2. FROM BlRscInc IMPORT INVENDIA,      (* TREE *) BIERE ,
  3.       LIMOS , KASSETEO, KASSEPRK, SBEIFAX , AUSSENST ,
  4.       CNCLINVT , OKINVNT ,      (* OBJECTs in TREE #6 *) SPENDDIA,      (* TREE *)
  5.       OKSPENDE , CNCLSPND , SPNDBTRG;      (* OBJECTs in TREE #7 *)
  6.  
  7. FROM EdiereBierListe IMPORT AnfangsUebertrag, BierListe,
  8.                            ComputeCustomer, SaveList, LoadList, LoadOldList;
  9. FROM BListe IMPORT Kunde,First,Next,AtLast,Empty,GetValue;
  10. FROM Bestellungen IMPORT AusgabenFuerBierKauf, AusgabenFuerLimoKauf,
  11.                          GekaufteBierFlaschen, GekaufteLimoFlaschen,
  12.                          SchuldenAnFax;
  13.  
  14. FROM PreisErfassung IMPORT VerkaufsPreis,SavePreise,LoadPreise,LoadOldPreise;
  15.  
  16. FROM SYSTEM IMPORT ADDRESS,VAL;
  17. FROM AES IMPORT FormAlert,ResourceGetAddr;
  18. FROM EasyDialog IMPORT DoDialog,GetText,SetText,IsSelected;
  19. FROM ConvertStr IMPORT StrToInt,IntToStr,LongIntToStr,StrToLongInt;
  20. FROM InOut IMPORT OpenOutput,CloseOutput,OpenInput,CloseInput,Done,
  21.                   WriteString,WriteInt,ReadInt,WriteLn;
  22. FROM LongInOut IMPORT ReadLongInt,WriteLongInt;
  23. FROM Strings IMPORT Delete;
  24. VAR  Kasse : RECORD
  25.                    Einnahmen,SummeDerEinnahmen,
  26.                    SpendenEingang,SummeDerSpenden,
  27.                    Ausgaben,SummeDerAusgaben,
  28.                    BierEinkaufsWert,SummeBierEinkaufsWert,
  29.                    LimoEinkaufsWert,SummeLimoEinkaufsWert,
  30.                    BierVerkaufsWert,SummeBierVerkaufsWert,
  31.                    LimoVerkaufsWert,SummeLimoVerkaufsWert,
  32.                    AnfangsStand                             :LONGINT;
  33.  
  34.                    BierFlaschenEinGang,SummeDerBierFlaschen,
  35.                    LimoFlaschenEinGang,SummeDerLimoFlaschen,
  36.                    BierStriche,SummeDerBierStriche,
  37.                    LimoStriche,SummeDerLimoStriche          :INTEGER;
  38.              END(*RECORD*);
  39.  
  40.   AnfangsUebertragnaechsteListe,
  41.                 EndUebertrag    : LONGINT;
  42.  
  43.  
  44.  
  45. PROCEDURE SpendenErfassen;
  46. VAR SpendenDiaAddr :ADDRESS;
  47.    DiaRet          :INTEGER;
  48.    SpendenStr      :ARRAY [0..5] OF CHAR;
  49.    OK              :BOOLEAN;
  50.  
  51. BEGIN
  52.     ResourceGetAddr(0,SPENDDIA,SpendenDiaAddr);
  53.     DiaRet:=DoDialog(SpendenDiaAddr,SPNDBTRG);
  54.     IF DiaRet=OKSPENDE THEN
  55.          GetText(SPNDBTRG,SpendenDiaAddr,SpendenStr);
  56.          StrToLongInt(SpendenStr,Kasse.SpendenEingang,OK);
  57.     END(*IF*);
  58. END  SpendenErfassen;
  59.  
  60. PROCEDURE ComputeKassenRecord;
  61. VAR
  62.     StricheBeiBier,
  63.     StricheBeiLimo : INTEGER;
  64.     Customer       : Kunde;
  65.  
  66. PROCEDURE ComputeList;
  67.  VAR OK : BOOLEAN;
  68. BEGIN
  69.     EndUebertrag:=0D;
  70.     IF ~Empty(BierListe) THEN
  71.        First(BierListe);
  72.        LOOP
  73.           OK:=GetValue(BierListe,Customer);
  74.           EndUebertrag:= EndUebertrag+Customer.Uebertrag;
  75.           AnfangsUebertragnaechsteListe:=
  76.           AnfangsUebertragnaechsteListe+Customer.Rechnung;
  77.  
  78.           StricheBeiBier:= StricheBeiBier+Customer.Biere;
  79.           StricheBeiLimo:= StricheBeiLimo+Customer.Limos;
  80.           IF AtLast(BierListe) THEN EXIT END(*IF*);
  81.           Next(BierListe);
  82.        END(*LOOP*);
  83.     END(*IF*);
  84. END  ComputeList;
  85.  
  86. BEGIN
  87.   AnfangsUebertragnaechsteListe:=0D;
  88.   EndUebertrag:=0D;
  89.   StricheBeiBier:=0;
  90.   StricheBeiLimo:=0;
  91.   ComputeList;
  92.   WITH Kasse DO
  93.     Einnahmen:=AnfangsUebertrag-EndUebertrag;
  94.     (* AnfangsUebertrag-EndUebertrag = Eingänge aus Bierliste *)
  95.  
  96.     BierEinkaufsWert:=AusgabenFuerBierKauf;
  97.     LimoEinkaufsWert:=AusgabenFuerLimoKauf;
  98.  
  99.     Ausgaben:=BierEinkaufsWert+LimoEinkaufsWert;
  100.     (* AnfangsStand bleibt gleich *)
  101.  
  102.     BierFlaschenEinGang:=GekaufteBierFlaschen;(* gelieferte BierKästen * Flaschen/Kasten *)
  103.     LimoFlaschenEinGang:=GekaufteLimoFlaschen;(*  -----"----  *)
  104.  
  105.     BierVerkaufsWert:=VAL(LONGINT,(GekaufteBierFlaschen*VerkaufsPreis.BierPreis));
  106.        (*  gelieferte Bierkästen * Flaschen/Kasten * BierVerkaufsPreis *)
  107.     LimoVerkaufsWert:=VAL(LONGINT,(GekaufteBierFlaschen*VerkaufsPreis.LimoPreis));
  108.         (*  -----"-----  *)
  109.  
  110.     BierStriche:=StricheBeiBier;(* Summe der BierStriche aller Kunden *)
  111.     LimoStriche:=StricheBeiLimo;
  112.  END(*WITH*);
  113. END ComputeKassenRecord;
  114.  
  115. PROCEDURE Record0Initialisieren;
  116. BEGIN
  117.   WITH Kasse DO
  118.     Einnahmen:=0D;
  119.     SpendenEingang:=0D;
  120.     Ausgaben:=0D;
  121.     BierEinkaufsWert:=0D;
  122.     LimoEinkaufsWert:=0D;
  123.     BierVerkaufsWert:=0D;
  124.     LimoVerkaufsWert:=0D;
  125.     AnfangsStand:=0D;
  126.  
  127.     BierFlaschenEinGang:=0;
  128.     LimoFlaschenEinGang:=0;
  129.     BierStriche:=0;
  130.     LimoStriche:=0;
  131.  END(*WITH*);
  132.  
  133.  
  134. END  Record0Initialisieren;
  135.  
  136. PROCEDURE RecordSummen0Initialisieren;
  137. BEGIN
  138.   WITH Kasse DO
  139.     SummeDerEinnahmen:=0D;
  140.     SummeDerSpenden:=0D;
  141.     SummeDerAusgaben:=0D;
  142.     SummeBierEinkaufsWert:=0D;
  143.     SummeLimoEinkaufsWert:=0D;
  144.     SummeBierVerkaufsWert:=0D;
  145.     SummeLimoVerkaufsWert:=0D;
  146.     AnfangsStand:=0D;
  147.     SummeDerBierFlaschen:=0;
  148.     SummeDerLimoFlaschen:=0;
  149.     SummeDerBierStriche:=0;
  150.     SummeDerLimoStriche:=0;
  151.  END(*WITH*);
  152. END  RecordSummen0Initialisieren;
  153.  
  154. PROCEDURE RecordInitialisieren;
  155. BEGIN
  156.   WITH Kasse DO
  157.     SummeDerEinnahmen:=
  158.     Einnahmen+SummeDerEinnahmen;
  159.     SummeDerSpenden:=
  160.     SpendenEingang+SummeDerSpenden;
  161.     SummeDerAusgaben:=
  162.     Ausgaben+SummeDerAusgaben;
  163.     SummeBierEinkaufsWert:=
  164.     BierEinkaufsWert+SummeBierEinkaufsWert;
  165.     SummeLimoEinkaufsWert:=
  166.     LimoEinkaufsWert+SummeLimoEinkaufsWert;
  167.     SummeBierVerkaufsWert:=
  168.     BierVerkaufsWert+SummeBierVerkaufsWert;
  169.     SummeLimoVerkaufsWert:=
  170.     LimoVerkaufsWert+SummeLimoVerkaufsWert;
  171.     SummeDerBierFlaschen:=
  172.     BierFlaschenEinGang+SummeDerBierFlaschen;
  173.     SummeDerLimoFlaschen:=
  174.     LimoFlaschenEinGang+SummeDerLimoFlaschen;
  175.     SummeDerBierStriche:=
  176.     BierStriche+SummeDerBierStriche;
  177.     SummeDerLimoStriche:=
  178.     LimoStriche+SummeDerLimoStriche;
  179.  END(*WITH*);
  180.  Record0Initialisieren;
  181. END  RecordInitialisieren;
  182.  
  183. PROCEDURE WriteKassenRecord;
  184. BEGIN
  185.   ComputeKassenRecord;
  186.   WITH Kasse DO
  187.     WriteLongInt(Einnahmen,10);WriteLongInt(SummeDerEinnahmen,10);
  188.     WriteLongInt(SpendenEingang,10);WriteLongInt(SummeDerSpenden,10);
  189.     WriteLongInt(Ausgaben,10);WriteLongInt(SummeDerAusgaben,10);
  190.     WriteLongInt(BierEinkaufsWert,10);WriteLongInt(SummeBierEinkaufsWert,10);
  191.     WriteLn;
  192.     WriteLongInt(LimoEinkaufsWert,10);WriteLongInt(SummeLimoEinkaufsWert,10);
  193.     WriteLongInt(BierVerkaufsWert,10);WriteLongInt(SummeBierVerkaufsWert,10);
  194.     WriteLongInt(LimoVerkaufsWert,10);WriteLongInt(SummeLimoVerkaufsWert,10);
  195.     WriteLongInt(AnfangsStand,10);
  196.     WriteLn;
  197.     WriteInt(BierFlaschenEinGang,10);WriteInt(SummeDerBierFlaschen,10);
  198.     WriteInt(LimoFlaschenEinGang,10);WriteInt(SummeDerLimoFlaschen,10);
  199.     WriteInt(BierStriche,10);WriteInt(SummeDerBierStriche,10);
  200.     WriteInt(LimoStriche,10);WriteInt(SummeDerLimoStriche,10);
  201.  END(*WITH*);
  202. END WriteKassenRecord;
  203.  
  204. PROCEDURE ReadKassenRecord;
  205. BEGIN
  206.   WITH Kasse DO
  207.     ReadLongInt(Einnahmen);ReadLongInt(SummeDerEinnahmen);
  208.     ReadLongInt(SpendenEingang);ReadLongInt(SummeDerSpenden);
  209.     ReadLongInt(Ausgaben);ReadLongInt(SummeDerAusgaben);
  210.     ReadLongInt(BierEinkaufsWert);ReadLongInt(SummeBierEinkaufsWert);
  211.     ReadLongInt(LimoEinkaufsWert);ReadLongInt(SummeLimoEinkaufsWert);
  212.     ReadLongInt(BierVerkaufsWert);ReadLongInt(SummeBierVerkaufsWert);
  213.     ReadLongInt(LimoVerkaufsWert);ReadLongInt(SummeLimoVerkaufsWert);
  214.     ReadLongInt(AnfangsStand);
  215.  
  216.     ReadInt(BierFlaschenEinGang);ReadInt(SummeDerBierFlaschen);
  217.     ReadInt(LimoFlaschenEinGang);ReadInt(SummeDerLimoFlaschen);
  218.     ReadInt(BierStriche);ReadInt(SummeDerBierStriche);
  219.     ReadInt(LimoStriche);ReadInt(SummeDerLimoStriche);
  220.  END(*WITH*);
  221. END ReadKassenRecord;
  222.  
  223. PROCEDURE DruckOK():BOOLEAN;
  224. VAR s: ARRAY [0..127] OF CHAR;
  225.     formret : INTEGER;
  226. BEGIN
  227.    s :='[2][Druck in Ordnung?|Ja = Druck OK|Nein = Druck wiederholen][  Ja  | Nein ]';
  228.    formret:=FormAlert(1,s);
  229.    RETURN formret=1
  230. END DruckOK;
  231.  
  232. PROCEDURE InventurMachen;
  233. VAR InventurDiaAddr :ADDRESS;
  234.     DiaRet          :INTEGER;
  235.     BierStr,LimoStr :ARRAY [0..2] OF CHAR;
  236.     SollKassenStdStr,
  237.     KassenStdStr,
  238.     SchuldenStr,
  239.     AussenStdStr    :ARRAY [0..6] OF CHAR;
  240.     BierFlaschenSchwund,
  241.     LimoFlaschenSchwund,
  242.     BierImKSchrank,
  243.     LimoImKSchrank  : INTEGER;
  244.     WertDesKSchranks,
  245.     AussenStaende,
  246.     SollKassenStand,
  247.     KassenStand     : LONGINT;
  248.     OK              : BOOLEAN;
  249.  
  250. PROCEDURE WriteDM(DeMark:LONGINT);
  251. BEGIN
  252.    WriteLongInt((DeMark DIV  100D),5);
  253.    WriteString('.');
  254.    WriteLongInt((DeMark MOD 100D),2);
  255.    WriteString(' DM ');
  256. END  WriteDM;
  257. PROCEDURE WriteProzent(a,b:LONGINT);
  258. BEGIN
  259.    IF (a>0D)AND (b>0D) THEN
  260.       WriteLongInt((a*100D) DIV b,5);
  261.       WriteString('% ');
  262.    END(*IF*);
  263. END WriteProzent;
  264.  
  265. PROCEDURE TexteBerechnen;
  266. BEGIN
  267.     ComputeKassenRecord;
  268.     SollKassenStand:=Kasse.SummeBierVerkaufsWert- Kasse.SummeBierEinkaufsWert
  269.                     +Kasse.AnfangsStand+Kasse.SummeLimoVerkaufsWert
  270.                     -Kasse.SummeLimoEinkaufsWert;
  271.     KassenStand:=Kasse.SummeDerEinnahmen+Kasse.SummeDerSpenden
  272.                +Kasse.AnfangsStand-Kasse.SummeDerAusgaben
  273.                +Kasse.SpendenEingang+Kasse.SummeDerSpenden;
  274.  
  275.  
  276.     LongIntToStr(SollKassenStand,7,SollKassenStdStr,OK);
  277.     LongIntToStr(KassenStand,7,KassenStdStr,OK);
  278.     LongIntToStr(SchuldenAnFax(),7,SchuldenStr,OK);
  279.     AussenStaende:= AnfangsUebertragnaechsteListe;
  280.     LongIntToStr(AussenStaende,7,AussenStdStr,OK);
  281.     Delete(KassenStdStr,1,1);
  282.     Delete(SollKassenStdStr,1,1);
  283.     Delete(SchuldenStr,1,1);
  284.     Delete(AussenStdStr,1,1);
  285. END  TexteBerechnen;
  286. BEGIN
  287.     TexteBerechnen;
  288.     ResourceGetAddr(0,INVENDIA,InventurDiaAddr);
  289.     SetText(KASSETEO,InventurDiaAddr,SollKassenStdStr);
  290.     SetText(KASSEPRK,InventurDiaAddr,KassenStdStr);
  291.     SetText(SBEIFAX,InventurDiaAddr,SchuldenStr);
  292.     SetText(AUSSENST,InventurDiaAddr,AussenStdStr);
  293.     DiaRet:=DoDialog(InventurDiaAddr,BIERE);
  294.     IF DiaRet=OKINVNT THEN
  295.          GetText(BIERE,InventurDiaAddr,BierStr);
  296.          GetText(LIMOS,InventurDiaAddr,LimoStr);
  297.          GetText(KASSEPRK,InventurDiaAddr,KassenStdStr);
  298.          GetText(AUSSENST,InventurDiaAddr,AussenStdStr);
  299.          StrToInt(BierStr,BierImKSchrank,OK);
  300.          StrToInt(LimoStr,LimoImKSchrank,OK);
  301.          StrToLongInt(AussenStdStr,AussenStaende,OK);
  302.          StrToLongInt(KassenStdStr,KassenStand,OK);
  303.          REPEAT
  304.           OpenOutput('PRN:');
  305.           WriteString('Aussenstände:');WriteDM(AussenStaende);
  306.           WriteLn;
  307.           WriteString('Kasseninhalt :');WriteDM(KassenStand);
  308.           WriteLn;
  309.           WriteString('Schulden beim Fax ');WriteDM(SchuldenAnFax());
  310.           WriteLn;
  311.           WriteString('Biere im KühlSchrank :');WriteInt(BierImKSchrank,5);
  312.           WriteLn;
  313.           WriteString('Limos im KühlSchrank :');WriteInt(LimoImKSchrank,5);
  314.           WriteLn;
  315.           WertDesKSchranks:=(VAL(LONGINT,(BierImKSchrank*VerkaufsPreis.BierPreis))+
  316.                              VAL(LONGINT,(LimoImKSchrank*VerkaufsPreis.LimoPreis)));
  317.           WriteString('Wert der Getränke im Kühlschrank:');
  318.           WriteDM(WertDesKSchranks);
  319.           WriteLn;
  320.           WriteString('Kassenstand aus obigen');
  321.           WriteDM(WertDesKSchranks+KassenStand+AussenStaende-SchuldenAnFax());
  322.           WriteLn;
  323.           BierFlaschenSchwund:=(Kasse.BierFlaschenEinGang+Kasse.SummeDerBierFlaschen
  324.                               -(Kasse.BierStriche+Kasse.SummeDerBierStriche)
  325.                               -BierImKSchrank);
  326.  
  327.           WriteString('Schwund an Bieren');WriteInt(BierFlaschenSchwund,7);
  328.           WriteString('Flaschen =');
  329.           WriteProzent((BierFlaschenSchwund),
  330.                         (Kasse.BierFlaschenEinGang+Kasse.SummeDerBierFlaschen));
  331.  
  332.           WriteLn;
  333.           LimoFlaschenSchwund:=(Kasse.LimoFlaschenEinGang+Kasse.SummeDerLimoFlaschen
  334.                               -LimoImKSchrank)
  335.                               -(Kasse.LimoStriche+Kasse.SummeDerLimoStriche);
  336.  
  337.           WriteString('Schwund an Limos');WriteInt(LimoFlaschenSchwund,7);
  338.           WriteString('Flaschen =');
  339.           WriteProzent(LimoFlaschenSchwund,
  340.                        (Kasse.LimoFlaschenEinGang+Kasse.SummeDerLimoFlaschen));
  341.  
  342.           WriteLn;
  343.           WriteString('Schwund an Bargeld aus Kasse: ');
  344.           WriteDM(KassenStand-(Kasse.SummeDerEinnahmen+Kasse.Einnahmen
  345.                +Kasse.AnfangsStand-Kasse.SummeDerAusgaben-Kasse.Ausgaben
  346.                +Kasse.SpendenEingang+Kasse.SummeDerSpenden));
  347.           WriteString(' ');WriteLn;
  348.  
  349.           WriteString('Gesammter Schwund');
  350.           WriteDM((Kasse.SummeDerEinnahmen+Kasse.Einnahmen)
  351.                   - (Kasse.BierVerkaufsWert+Kasse.SummeBierVerkaufsWert
  352.                     +Kasse.LimoVerkaufsWert+Kasse.SummeLimoVerkaufsWert)
  353.                     -WertDesKSchranks);
  354.  
  355.           WriteLn;
  356.           WriteString('Erwirtschafteter Überschuss (ohne Spenden)');
  357.           WriteDM((Kasse.SummeDerEinnahmen+Kasse.Einnahmen)
  358.                    -(Kasse.SummeDerAusgaben+Kasse.Ausgaben));
  359.  
  360.           WriteLn;
  361.           WriteString('Einnahmen aus Spenden :');
  362.           WriteDM(Kasse.SpendenEingang+Kasse.SummeDerSpenden);
  363.           WriteLn;
  364.           WriteString('Erwirtschafteter Überschuss (incl Spenden)');
  365.           WriteDM((Kasse.SummeDerEinnahmen+Kasse.Einnahmen)
  366.                    -(Kasse.SummeDerAusgaben+Kasse.Ausgaben)
  367.                    +(Kasse.SpendenEingang+Kasse.SummeDerSpenden));
  368.           WriteString(14C);
  369.           WriteLn;
  370.           WriteString('*****************************************************************');WriteLn;
  371.           WriteString('Einnahmen,SummeDerEinnahmen, SpendenEingang,SummeDerSpenden,');WriteLn;
  372.           WriteString('Ausgaben,SummeDerAusgaben, BierEinkaufsWert,SummeBierEinkaufsWert, CR');WriteLn;
  373.           WriteString('LimoEinkaufsWert,SummeLimoEinkaufsWert, BierVerkaufsWert,SummeBierVerkaufsWert,');WriteLn;
  374.           WriteString('LimoVerkaufsWert,SummeLimoVerkaufsWert, AnfangsStand, CR');WriteLn;
  375.           WriteString('BierFlaschenEinGang,SummeDerBierFlaschen, LimoFlaschenEinGang,SummeDerLimoFlaschen,');WriteLn;
  376.           WriteString('BierStriche,SummeDerBierStriche, LimoStriche,SummeDerLimoStriche');WriteLn;
  377.           WriteString('*******************************************************************');WriteLn;
  378.           WriteKassenRecord;
  379.           CloseOutput;
  380.          UNTIL DruckOK();
  381.          Record0Initialisieren;
  382.          RecordSummen0Initialisieren;
  383.          Kasse.BierFlaschenEinGang:=BierImKSchrank;
  384.          Kasse.LimoFlaschenEinGang:=LimoImKSchrank;
  385.          Kasse.BierVerkaufsWert:= VAL(LONGINT,(BierImKSchrank*VerkaufsPreis.BierPreis));
  386.          Kasse.LimoVerkaufsWert:= VAL(LONGINT,(LimoImKSchrank*VerkaufsPreis.LimoPreis));
  387.          Kasse.AnfangsStand:=KassenStand;
  388.     END(*IF*);
  389. END  InventurMachen;
  390.  
  391.  
  392.  
  393. PROCEDURE BierListeSpeichern(OutFileName : ARRAY OF CHAR);
  394. VAR OK : BOOLEAN;
  395. BEGIN
  396.    OpenOutput(OutFileName);
  397.    IF Done THEN
  398.      WriteKassenRecord;
  399.      SavePreise;
  400.      SaveList;
  401.    END(*IF*);
  402.    CloseOutput;
  403. END BierListeSpeichern;
  404.  
  405.  
  406. PROCEDURE BierListeLaden(InFileName :ARRAY OF CHAR);
  407. BEGIN
  408.     OpenInput(InFileName);
  409.     IF Done THEN
  410.       ReadKassenRecord;
  411.       RecordInitialisieren;
  412.       LoadPreise;
  413.       LoadList;
  414.     END(*IF*);
  415.     CloseInput;
  416. END  BierListeLaden;
  417. PROCEDURE AlteBierListeLaden(InFileName :ARRAY OF CHAR);
  418. BEGIN
  419.     OpenInput(InFileName);
  420.     IF Done THEN
  421.       ReadKassenRecord;
  422.       LoadOldPreise;
  423.       LoadOldList;
  424.     END(*IF*);
  425.     CloseInput;
  426. END  AlteBierListeLaden;
  427.  
  428. BEGIN
  429.    Record0Initialisieren;
  430.    RecordSummen0Initialisieren
  431. END  KassenStand.
  432.